home *** CD-ROM | disk | FTP | other *** search
- /*
- File: QuickTakePICT.h
-
- Contains: My Application Shell.
-
- Written by: John Wang
-
- Copyright: © 1994 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <1> 09/30/94 JW New.
-
- To Do:
-
- */
-
- #ifdef THINK_C
- #define applec
- #endif
-
- /* ------------------------------------------------------------------------- */
-
- // Flags
- #define kQktkRotationBits (0x3) // Mask for the rotation bits (see below).
- #define kQktkVerticalImage 1 // Vertical (width < height) image (low order bit of rotation bits).
- #define kImgRot0 0 // 0 degree rotation (width > height).
- #define kImgRot90 1 // 90 degree counterclockwise rotation.
- #define kImgRot180 2 // 180 degree rotation.
- #define kImgRot270 3 // 270 degree counterclockwise rotation.
- #define kQktkStdResImage (1<<2) // Standard resolution QuickTake image (320x240).
- #define kQktkHiResImage (1<<3) // High resolution QuickTake image (640x480).
- #define kQktkThumbnailImage (1<<8) // Thumbnail image.
- #define kQktkHasColorMatrix (1<<9) // Camera color matrix is included in header.
- #define kQktkHasCompressionTable (1<<10) // Compression table is included in header.
-
- // Structs
- struct PictFileHeader {
- long signature; // 'qktk' for Venus or 'qktn' for Nimbus
- short version; // file format is version = 0 for both Venus and Nimbus
- short flags; // kQktkStdResImage or kQktkHiResImage flags valid only
- long thumbnailOffset; // Offset to thumbnail or 0 if not present.
- };
- typedef struct PictFileHeader PictFileHeader;
-
- struct ImageHeader
- {
- long signature; // 'qktk' for Venus or 'qktn' for Nimbus
- short version; // file format is version = 0 for both Venus and Nimbus
- short flags; // See above constants. Not set: kQktkHasColorMatrix and kQktkHasCompressionTable.
- long dataSize; // Size is fixed size for Venus but variable for Nimbus.
- };
- typedef struct ImageHeader ImageHeader;
-
- struct ImageHeader_CM
- {
- long signature; // 'qktk' for Venus or 'qktn' for Nimbus
- short version; // version = 1 for Venus, version = 2 for Nimbus
- short flags; // See above constants. Set: kQktkHasColorMatrix.
- double colorMatrix[3*4];
- long dataSize; // Size is fixed for Venus but variable for Nimbus.
- };
- typedef struct ImageHeader_CM ImageHeader_CM;
-
- struct ImageHeader_CT100
- {
- long signature; // 'qktk' for Venus or 'qktn' for Nimbus
- short version; // version = 1 for Venus, version = 2 for Nimbus
- short flags; // See above constants. Set: kQktkHasCompressionTable.
- unsigned short compTableSize;
- char compTable[kCmDecompTableSize100];
- long dataSize; // Size is fixed for Venus but variable for Nimbus.
- };
- typedef struct ImageHeader_CT100 ImageHeader_CT100;
-
- struct ImageHeader_CT150
- {
- long signature; // 'qktk' for Venus or 'qktn' for Nimbus
- short version; // version = 1 for Venus, version = 2 for Nimbus
- short flags; // See above constants. Set: kQktkHasCompressionTable.
- unsigned short compTableSize;
- char compTable[kCmDecompTableSize150];
- long dataSize; // Size is fixed for Venus but variable for Nimbus.
- };
- typedef struct ImageHeader_CT150 ImageHeader_CT150;
-
- struct ImageHeader_CM_CT100
- {
- long signature; // 'qktk' for Venus or 'qktn' for Nimbus
- short version; // version = 1 for Venus, version = 2 for Nimbus
- short flags; // See above constants. Set: kQktkHasColorMatrix and kQktkHasCompressionTable.
- double colorMatrix[3*4];
- unsigned short compTableSize;
- char compTable[kCmDecompTableSize100];
- long dataSize; // Size is fixed for Venus but variable for Nimbus.
- };
- typedef struct ImageHeader_CM_CT100 ImageHeader_CM_CT100;
-
- struct ImageHeader_CM_CT150
- {
- long signature; // 'qktk' for Venus or 'qktn' for Nimbus
- short version; // version = 1 for Venus, version = 2 for Nimbus
- short flags; // See above constants. Set: kQktkHasColorMatrix and kQktkHasCompressionTable.
- double colorMatrix[3*4];
- unsigned short compTableSize;
- char compTable[kCmDecompTableSize150];
- long dataSize; // Size is fixed for Venus but variable for Nimbus.
- };
- typedef struct ImageHeader_CM_CT150 ImageHeader_CM_CT150;
-
- struct ThumbnailHeader
- {
- long signature; // 'qktk' for Venus or 'qktn' for Nimbus
- short version; // version = 1 for Venus, version = 2 for Nimbus
- short flags; // same as TQuickTakeImageHeader with kQktkThumbnailImage set.
- long dataSize; // Size of thumbnail data (2400 for Venus and Nimbus)
- };
- typedef struct ThumbnailHeader ThumbnailHeader;
-
- /* ------------------------------------------------------------------------- */
-
- OSErr MakeQuickTakePicture(ImageHeader *imageHeader, Ptr imageBuffer,
- CmColorMatrixPtr colorMatrix, BufferPtr decompTable, PicHandle *pict);
- OSErr LoadThumbnailPict(FSSpec *theFSSpec, PicHandle *pict);
- OSErr LoadPict(FSSpec *theFSSpec, PicHandle *pict, Handle *thumbnail,
- ThumbnailHeader *thumbnailHeader, CmPictureInfo *pictureInfo);
- OSErr SavePict(FSSpec *theFSSpec, OSType creatorType, PicHandle pict, Handle thumbnail,
- ThumbnailHeader *thumbnailHeader, CmPictureInfo *pictureInfo);
- OSErr GetFileHeaderFromPict(PicHandle pict, PictFileHeader *fileHeader);
- OSErr GetImageHeaderFromPict(PicHandle pict, ImageHeader *imageHeader);
- OSErr GetImageBufferFromPict(PicHandle pict, Ptr *imageBuffer);
- void DrawPictureWithProgress(PicHandle pict, Rect *pictRect);